import configs from "@/common/config.js"
const BASE_URL = configs.baseUrl


// 新增全局默认配置
const DEFAULT_CONFIG = {
  silent: false,      // 是否静默模式（不自动弹窗）
  showLoading: true,  // 是否显示加载状态
  retry: 0,           // 重试次数
  token:uni.getStorageSync('token') || ''
}

const http = (method, url, data, config = {}) => {
  const mergedConfig = { ...DEFAULT_CONFIG, ...config }
  
  return new Promise((resolve, reject) => {
    // 显示加载状态
    if (mergedConfig.showLoading) {
      uni.showLoading({ title: '加载中...', mask: true })
    }

    uni.request({
      url: BASE_URL + url,
      method,
      data,
      header: {
        'Content-Type': 'application/json',
        'token': mergedConfig.token
      },
      complete: () => {
        if (mergedConfig.showLoading) {
          uni.hideLoading()
        }
      },
      success: (response) => {
        // HTTP 状态码拦截器（支持静默模式）
        if (handleHttpError(response, mergedConfig)) {
          return reject(response)
        }

        // 业务状态码拦截器（支持静默模式）
        if (handleBusinessError(response.data, mergedConfig)) {
          return reject(response.data)
        }

        resolve(response.data)
      },
      fail: (err) => {
        handleNetworkError(err, mergedConfig)
        reject(err)
      }
    })
  })
}

// HTTP 错误处理（返回是否阻断流程）
const handleHttpError = (response, config) => {
  const handlers = {
    401: () => {
      !config.silent && uni.showToast({ title: '登录过期', icon: 'none' })
      uni.removeStorageSync('token')
      uni.reLaunch({ url: '/pages_login/login' })
    },
    403: () => !config.silent && uni.showToast({ title: '无访问权限', icon: 'none' }),
    404: () => !config.silent && uni.showToast({ title: '资源不存在', icon: 'none' }),
    500: () => !config.silent && uni.showToast({ title: '服务器错误', icon: 'none' })
  }

  if (handlers[response.statusCode]) {
    handlers[response.statusCode]()
    return true // 阻断后续处理
  }
  return false
}

// 业务错误处理（返回是否阻断流程）
const handleBusinessError = (data, config) => {
  if (data.code !== 200&&data.code !== 1) {
    !config.silent && uni.showToast({
      title: data.message || `业务错误（${data.code}）`,
      icon: 'none'
    })
    return true // 阻断后续处理
  }
  return false
}

// 网络错误处理
const handleNetworkError = (err, config) => {
  !config.silent && uni.showToast({ title: '网络连接失败', icon: 'none' })
}

export default {
  get(url, params, config) { 
    return http('GET', url, { params }, config) 
  },
  post(url, data, config) { 
    return http('POST', url, data, config) 
  }
}